#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,u,v,s[1011][1011];
vector<int> e[164514];
vector<pair<int,int> > ed[164514];
long long dis[166666],vis[6666],a,b;
void dfs(int u,int fa)
{
	dis[u]=dis[fa]+1;
	for(auto v:e[u]) if(v!=fa) dfs(v,u);
}
int main()
{
	freopen("edge.in","r",stdin);
	freopen("edge.out","w",stdout);
	cin>>n>>m>>a>>b;
	if(m<=1000)
	{
	for(i=1;i<=m;i++)
	{
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
		ed[u].push_back({v,a});
		ed[v].push_back({u,a});
		s[u][v]=s[v][u]=1;
	}
	for(i=1;i<=n;i++)
	{
		for(auto v:e[i])
		for(auto u:e[i])
			if(u>v&&!s[u][v]) ed[u].push_back({v,b}),ed[v].push_back({u,b}); 
	}
	memset(dis,0x3f,sizeof(dis));
	dis[1]=0;
	for(i=1;i<=n;i++)
	{
		long long md=1e18,u=0;
		for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<=md) md=dis[j],u=j;
		vis[u]=1;
		for(auto x:ed[u]) dis[x.first]=min(dis[x.first],dis[u]+x.second);
	}
	for(i=2;i<=n;i++) cout<<dis[i]<<endl;
	}
	else if(m==n-1)
	{
		for(i=1;i<=m;i++)
		{
			cin>>u>>v;
			e[u].push_back(v);
			e[v].push_back(u);
		}
		dis[0]=-1;
		dfs(1,0);
		for(i=2;i<=n;i++)
			cout<<dis[i]%2*a+min(dis[i]/2*b,dis[i]/2*2*a)<<endl;
	}
	return 0;
 } 
